// PersonMannageInterface.aidl
package com.test.learnaidl;

import com.test.learnaidl.bean.PersonBean;
import com.test.learnaidl.IOnNewPersonArrivedListener;
//注意 即便是在同一包下，也要手动导入Person类

// Declare any non-default types here with import statements

interface PersonMannageInterface {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
//    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
//            double aDouble, String aString);

        /*
            AIDL-修饰符in,out,inout
            https://www.yuque.com/jiajun-faizt/haag2g/atiecz

            定向Tag。定向Tag表示在跨进程通信中数据的流向，用于标注方法的参数值，分为 in、out、inout 三种。
            其中 in 表示数据只能由客户端流向服务端，
            out 表示数据只能由服务端流向客户端，
            而 inout 则表示数据可在服务端与客户端之间双向流通。
            此外，如果AIDL方法接口的参数值类型是：基本数据类型、String、CharSequence或者其他AIDL文件定义的方法接口，
            那么这些参数值的定向 Tag 默认是且只能是 in，所以除了这些类型外，其他参数值都需要明确标注使用哪种定向Tag。
            -----------------------------------
            Android AIDL 使用
            https://blog.51cto.com/u_15127640/2754027

        */
       boolean add(inout PersonBean personBean);

       boolean removeById(String id);

       boolean remove(inout PersonBean personBean);

       PersonBean getPersonBeanById(String id);

       List<PersonBean> getPersonBeans();

       /*
           AIDL-接口注册/解注册
           https://www.yuque.com/jiajun-faizt/haag2g/nb3aur
       */

       void registerListener(IOnNewPersonArrivedListener listener);

       void unregisterListener(IOnNewPersonArrivedListener listener);
}